main() {
  /* 
  常用数据类型：
    Numbers（数值）:
      int  必须是整型
      double 可以整型 也可浮点型
    Strings（字符串）
      String
    Booleans(布尔)
      bool
    List（数组）
      在Dart中，数组是列表对象，所以大多数人只是称它们为列表  
    Maps（字典）
      通常来说，Map 是一个键值对相关的对象。 键和值可以是任何类型的对象。每个 键 只出现一次， 而一个值则可以出现多次
  */

  // 1. 定义字符串  单引号或双引号都可以
  var str1 = 'this is str1';
  print(str1);

  // 1.1 类似js的模板字符串 ''''''  中间如果有空格或换行也会被解析
  String str2 = '''
  我也是字符串 
  ''';
  print(str2);

  // 1.2 拼接字符串
  print("$str1$str2");
  print(str1 + str2); // 和第一种拼接方法 输出的结果完全一致
  print(str1 + " -" + str2);

  // 2. 定义数值型
  int a = 123;
  // a = 45;
  print(a);

  double b = 23.5;
  // b=24;
  print(b);

  // 运算符 +-*/
  var sum = a + b;
  print(sum);

  // 3. 定义布尔值
  bool flag1 = true;
  print(flag1);

  // 3.1 条件判断
  var a1 = 123;
  var b1 = '123';
  // dart里 双等号也会判断类型
  if (a1 == b1) {
    print('为真');
  } else {
    print('为假');
  }

  // 4. 定义list

  // 可以指定类型也可以不指定类型
  var list1 = ["张三", 20, true];
  var list2 = <String>['1', '2', '3'];

  // 访问长度和元素 都是没问题的 和js用法一样
  print(list1.length);
  print(list2[1]);

  // 列表的方法
  list2.add('4');
  print(list2);

  var list3 = List.filled(2, "1"); // 第一个参数固定长度  第二个参数 默认填入的值
  print(list3.length);
  // list3.add('2'); // 不可修改长度 会报错  可以用 list3[0] = '2' 来覆盖原来的值
  print(list3);

  // 5. 定义对象 Maps

  //第一种定义 Maps的方式 类似json的写法
  var person = {
    "name": "张三",
    "age": 20,
    "work": ["程序员", "送外卖"]
  };

  print(person);
  print(person["name"]); // 不能用 . 访问
  print(person["age"]);
  print(person["work"]);

  //第二种定义 Maps的方式

  var p = new Map();
  p["name"] = "李四";
  p["age"] = 22;
  p["work"] = ["程序员", "送外卖"];
  print(p);
  print(p["age"]);

  // 类型判断  is 关键字  后续有没有新的判断类型方法还不知道

  // var str = '1234';
  // ignore: unnecessary_type_check
  // if (str is String) {
  //   print('是string类型');
  // } else if (str is int) {
  //   print('int');
  // } else {
  //   print('其他类型');
  // }

  var str = 123;
  if (str is String) {
    print('是string类型');
    // ignore: unnecessary_type_check
  } else if (str is int) {
    print('int');
  } else {
    print('其他类型');
  }
}
